package com.javasea.spring.proxy.jdkProxy;

import com.javasea.spring.proxy.cglibproxy.IUserDao;
import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

/**
 *@ClassName Demo
 *@Description TODO
 *@Author longxiaonan@163.com
 *@Date 2022/3/17 0017 15:03
 */
@Slf4j
public class DemoMain {
    /** jdk的代理, 注意引入的是 */
    public static void main(String[] args1) {
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        Class<?>[] classes = {IUserDao.class};

        /** InvocationHandler 是个接口类，它对应的实现内容就是代理对象的具体实现 */
        InvocationHandler handler = (proxy, method, args) ->
                // 这里如果使用 method.invok()，那么就可以代理目标方法的执行。
            "你被代理了 " + method.getName();
        IUserDao userDao = (IUserDao) Proxy.newProxyInstance(classLoader, classes, handler);

        /** 代理来执行方法，执行的是上面定义的handler中的方法 */
        String res = userDao.listAll();
        log.info("测试结果：{}", res);

        String res2 = userDao.queryUserInfo();
        log.info("测试结果：{}", res2);
    }
}
